//加载所需的模块
const db = require('../db');

const { md5 } = require('utility');

const jwt = require('jsonwebtoken');

// --------------------- 使用路由的步骤 ----------------------
// 1. 加载express
const express = require('express');
// 2. 创建路由对象，实则是个函数类型
const router = express.Router();


// 3. 写接口，把接口挂载到 router 上

//验证数据格式中间件
router.use((req, res, next) => {
    let { username, password } = req.body;
    if (username.length < 2 || username.length > 10) {
        next('用户名长度超过2-10位');
    } else if (password.length < 6 || password.length > 12) {
        next('密码必须是6-12位');
    }
    else {
        next();
    }
})

// ---------------------------注册接口------------------------------
router.post('/reguser', (req, res) => {
    // 有配置接受POST请求体就可以拿到数据,用req.body就可以拿到
    //console.log(req.body);
    let { username, password } = req.body;

    //验证用户是否存在
    db(`select * from user where username ='${username}'`, (e, r) => {
        if (e) throw e;
        if (r.length > 0) {
            res.send({ status: 1, message: '用户名已经存在' });
        } else {

            password = md5(password);

            let sql = `insert into user set username="${username}",password="${password}"`;

            db(sql, (err, result) => {
                if (err) throw err;
                res.send({ status: 0, message: '注册成功' });
            });
        };
    });
});

// --------------------------------用户登陆接口--------------------------
router.post('/login', (req, res) => {
    // console.log(req.body);
    let { username, password } = req.body;
    password = md5(password);
    let sql = `select * from user where username='${username}' and password='${password}' `;
    db(sql, (err, result) => {
        if (err) throw err;
        // 大于0就有结果值
        if (result.length > 0) {
            // console.log(result);
            // 登录成功，生成token
            // 在token中保存用户的id
            // token前必须加 “Bearer ”，注意空格
            /* 
            调用 jwt.sign() 方法创建token
           参数1：必填，对象形式；希望在token中保存的数据
           参数2：必填，字符串形式；加密的钥匙；后续解密token的时候，还需要使用。  
           参数3：可选，对象形式；配置项，比如可以配置token的有效期  { expiresIn: '2h' }
           参数4：可选，函数形式；生成token之后的回调
            */
            let token = jwt.sign({ id: result[0].id }, 'shhhhh', { expiresIn: '2h' });
            res.send({ status: 0, message: '登录成功', token: 'Bearer ' + token });
        } else {
            res.send({ status: 0, message: '账号或密码错误' });
        }
    })
})

//错误处理中间件
router.use((err, req, res, next) => {
    res.send({ status: 1, message: err });
})


//4 一定要导出 router
module.exports = router;